<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <script>
        //在事件处理函数 this  指向了事件源
        // 全局处理函数  this 指向了  window  对象
        // 在对象中定义的函数  this  指向对象本身  宿主本身
        // 在构造函数中 this 指向了 实例对象
        function fun(){
            console.log(this);//window
            
        }

        // 如何更改 this的指向
        let obj = {
            name:"张三",
            age:22
        }
        function f1(a,b) {
            console.log("我叫"+this.name+"我有"+a+"万给我自己"+b);
            
        }
        // f1()
        // 现在没办法输出张三 所以我要更改this 的指向 让他指向obj  这样我的函数才能输出  "我叫张三"
        // f1.call(obj,1000,1111) //改变f1 的this指向 让他指向obj 并且同时调用f1 函数
        // f1.apply(obj,[2000,33333])//与call的传参不同 apply  后面必须传输组

        //区别在于  call 传参时传入的参数列表  而aooly传入的是一个数组其他完全相同
        // call 方法需要传入参数列表  通过传入多个参数来实现传参
        // apply 方法如果需要传入多个参数 则必须传入数组格式

        let a= f1.bind(obj,1000,2000)
        console.log(a);
        a()
        

        // 改变this指向的方法
        // call(要指向的新环境，参数1，参数2，...) //如果需要传参只需要写多个参数
        // apply(要指向的新环境，[参数数组])    如果需要传参必须写入数组
        // 上面两个都会改变this 的同时 调用函数
        // bind(要指向的新环境，参数1，参数2，...)  //返回一个 改变好this指向的新函数
    </script>
</body>
</html>